package com.newlink.building.main.ui

import android.content.Intent
import android.os.Build
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import com.newlink.building.common_base.base.NL_BaseActivity
import com.newlink.building.common_base.model.bean.ProjectData
import com.newlink.building.common_base.widget.SpaceItemDecoration
import com.newlink.building.main.R
import com.newlink.building.main.adapter.Module_Main_PrjSelectAdapter
import com.newlink.building.main.databinding.ActivityPrjSelectBinding

/**
 * @Author: xiaodong
 * @Date: 2025/3/10
 * @Description: 项目选择界面。显示项目列表，允许用户选择一个项目，并将选中的项目数据返回给调用者。
 */
class Module_Main_PrjSelectActivityNL : NL_BaseActivity() {

    // 视图绑定实例
    private lateinit var binding: ActivityPrjSelectBinding

    // 项目列表适配器
    private var projectAdapter: Module_Main_PrjSelectAdapter? = null

    /**
     * 绑定布局文件并返回根视图。
     *
     * @return Activity 的根视图。
     */
    override fun attachLayoutRes(): View {
        binding = ActivityPrjSelectBinding.inflate(layoutInflater)
        return binding.root
    }

    /**
     * 初始化数据。从 Intent 中获取项目列表并初始化适配器。
     */
    override fun initData() {
        // 从 Intent 中安全地获取项目列表
        val projectList: MutableList<ProjectData>? = getSerializableListExtra(intent, "mPrjList")

        // 如果项目列表不为空，则初始化适配器
        projectAdapter = projectList?.let { Module_Main_PrjSelectAdapter(it) }
            ?: run {
                // 如果项目列表为空，可以显示一个错误消息或空状态
                // 例如：showToast("Failed to load project list.")
                // 或者初始化一个空的适配器：PrjSelectAdapter(mutableListOf())
                null // 或者抛出异常，取决于业务需求
            }
    }

    /**
     * 初始化视图组件和设置监听器。
     */
    override fun initView() {
        // 设置标题栏文本和返回图标
        binding.titleBar.tvTitleBarCenter.text = getString(R.string.prj_select_title)
        binding.titleBar.imageTitleBarBack.setImageResource(R.drawable.cancel_white)

        // 配置 RecyclerView
        binding.prjRecyclerView.apply {
            adapter = projectAdapter // 绑定适配器
            layoutManager = LinearLayoutManager(this@Module_Main_PrjSelectActivityNL) // 设置布局管理器
            addItemDecoration(SpaceItemDecoration(context)) // 添加ItemDecoration
        }

        // 设置适配器 Item 点击监听器
        projectAdapter?.setOnItemClickListener { _, _, position ->
            val selectedProject = projectAdapter?.data?.get(position)
            if (selectedProject != null) {
                val resultIntent = Intent().apply {
                    putExtra("mPrjData", selectedProject)
                }
                setResult(RESULT_OK, resultIntent)
                finish() // 关闭当前 Activity
            } else {
                // 处理选中项目为空的情况，例如显示Toast
                // showToast("Selected project data is null.")
            }
        }

        // 设置返回按钮的点击监听器
        binding.titleBar.imageTitleBarBack.setOnClickListener {
            finish() // 结束当前 Activity，不返回结果
        }
    }

    /**
     * 安全地从 Intent 中获取 Serializable 的 List。
     * 处理了 API 级别差异和类型转换安全。
     *
     * @param intent 包含数据的 Intent。
     * @param key Intent 中数据的键。
     * @return 解析后的 MutableList<ProjectData>，如果获取失败则为 null。
     */
    private fun getSerializableListExtra(intent: Intent, key: String): MutableList<ProjectData>? {
        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            // Android 13 (API 33) 及以上使用新的 getSerializable 方法
            intent.getSerializableExtra(key, ArrayList::class.java) as? MutableList<ProjectData>
        } else {
            // 低于 Android 13 的版本使用旧的 getSerializableExtra 方法
            @Suppress("DEPRECATION")
            intent.getSerializableExtra(key) as? MutableList<ProjectData>
        }
    }
}